¿Qué es R?

¿Qué es R?

R es tanto un lenguaje de programación como un programa.

R es una derivación de S, un lenguaje de programación creado por John Chambers en 1975-76 para Bell Labs.

¿Qué es R?

R fue creado en 1992 por Ross Ihaka y Robert Gentleman (Universidad de Auckland).

¿Qué es R?

R fue creado en 1992 por Ross Ihaka y Robert Gentleman (Universidad de Auckland).

¿Qué es R?

R fue creado en 1992 por Ross Ihaka y Robert Gentleman (Universidad de Auckland).

Versión inicial fue lanzada en 1995.

¿Qué es R?

R fue creado en 1992 por Ross Ihaka y Robert Gentleman (Universidad de Auckland).

Versión inicial fue lanzada en 1995.

Versión actual: 3.4.2

¿Por qué usar R?

Porque R…

¿Por qué usar R?

Porque R… con R,

¿Por qué usar R?

Porque R… con R, cigarro.

¿Por qué usar R?

Porque R… con R, cigarro.

¿Por qué usar R? (toma 2)

Tanto R como RStudio son gratuitos.

R simplifica enormemente la replicabilidad de nuestro análisis:

  • No hace falta copiar/pegar para reproducir proceso.
  • Basta con "correr" nuevamente el código o script.
  • Código bien documentado sirve como bitácora del procedimiento seguido durante análisis.

¿Por qué usar R? (toma 2)

R simplifica la colaboración:

  • Permite compartir el proceso y resultado de análisis de diferentes formas: Proyecto de R | código de R | doc. generado con RMarkdown.

R puede trabajar con todo tipo de base de datos.

R está en constante expansión (paquetes).

¿Por qué usar R? (toma 2)

Es (relativamente) "fácil" encontrar respuestas a dudas de código:

  • Enorme comunidad de programadores colaborando activa y gratuitamente.
  • Generalmente, basta con buscar en Google y/o Stack Overflow.

¿Qué es RStudio?

¿Qué es RStudio?

Es un entorno de desarrollo integrado que simplifica y hace más amigable el uso de R.

Creado en 2010 por Joseph J. Allaire.

Versión inicial fue lanzada en 2011.

Versión actual: 1.0.383

¿Qué es RStudio?

Dos sabores:

  • RStudio Desktop (Linux, Windows, macOS)
  • RStudio Server (Linux)

¿Por qué RStudio?

¿Por qué RStudio?

Para hacer nuestra vida menos miserable al usar R.

  • Organiza los páneles que de otra forma papalotean libremente
  • Permite generar proyectos, lo cual ayuda a ordenar flujo de trabajo
  • Compatible con sistemas de control de versiones (Git)
  • Permite exportar gráficas fácilmente
  • Autcomplete de código (¡horas y horas ahorradas!)

La interfaz de RStudio

La interfaz de RStudio

Está integrada por cuatro páneles:

  1. Editor de código

La interfaz de RStudio

Está integrada por cuatro páneles:

  1. Editor de código

  2. Consola

La interfaz de RStudio

Está integrada por cuatro páneles:

  1. Editor de código

  2. Consola

  3. Ambiente/Historia

La interfaz de RStudio

Está integrada por cuatro páneles:

  1. Editor de código

  2. Consola

  3. Ambiente/Historia

  4. Miscelania Don Segasi

Pero…

Pero…

¿Cómo lo hace?


¿Qué puede hacer R por nuestras vidas?

Calcular

R nos permite realizar diversas operaciones:

# Desde los cálculos más sencillos
2 + 2             
## [1] 4
4 * (6/3)
## [1] 8
74/3 + (10)^3
## [1] 1024.667

Calcular

R nos permite realizar diversas operaciones:

# Pasando por resumenes estadísticos

summary(mtcars)     # mtcars es una base de datos que viene precargada en R

Calcular

R nos permite realizar diversas operaciones:

# Pasando por resumenes estadísticos

summary(mtcars)     # mtcars es una base de datos que viene precargada en R
##       mpg             cyl             disp             hp       
##  Min.   :10.40   Min.   :4.000   Min.   : 71.1   Min.   : 52.0  
##  1st Qu.:15.43   1st Qu.:4.000   1st Qu.:120.8   1st Qu.: 96.5  
##  Median :19.20   Median :6.000   Median :196.3   Median :123.0  
##  Mean   :20.09   Mean   :6.188   Mean   :230.7   Mean   :146.7  
##  3rd Qu.:22.80   3rd Qu.:8.000   3rd Qu.:326.0   3rd Qu.:180.0  
##  Max.   :33.90   Max.   :8.000   Max.   :472.0   Max.   :335.0  
##       drat             wt             qsec             vs        
##  Min.   :2.760   Min.   :1.513   Min.   :14.50   Min.   :0.0000  
##  1st Qu.:3.080   1st Qu.:2.581   1st Qu.:16.89   1st Qu.:0.0000  
##  Median :3.695   Median :3.325   Median :17.71   Median :0.0000  
##  Mean   :3.597   Mean   :3.217   Mean   :17.85   Mean   :0.4375  
##  3rd Qu.:3.920   3rd Qu.:3.610   3rd Qu.:18.90   3rd Qu.:1.0000  
##  Max.   :4.930   Max.   :5.424   Max.   :22.90   Max.   :1.0000  
##        am              gear            carb      
##  Min.   :0.0000   Min.   :3.000   Min.   :1.000  
##  1st Qu.:0.0000   1st Qu.:3.000   1st Qu.:2.000  
##  Median :0.0000   Median :4.000   Median :2.000  
##  Mean   :0.4062   Mean   :3.688   Mean   :2.812  
##  3rd Qu.:1.0000   3rd Qu.:4.000   3rd Qu.:4.000  
##  Max.   :1.0000   Max.   :5.000   Max.   :8.000

Calcular

R nos permite realizar diversas operaciones:

# Pasando por resumenes estadísticos

mean(mtcars$mpg)    # Promedio
## [1] 20.09062

Calcular

R nos permite realizar diversas operaciones:

# Pasando por resumenes estadísticos

mean(mtcars$mpg)    # Promedio
## [1] 20.09062
median(mtcars$mpg)  # Mediana
## [1] 19.2

Calcular

R nos permite realizar diversas operaciones:

# Pasando por resumenes estadísticos

mean(mtcars$mpg)    # Promedio
## [1] 20.09062
median(mtcars$mpg)  # Mediana
## [1] 19.2
sd(mtcars$mpg)      # Desviación estándar
## [1] 6.026948

Calcular

R nos permite realizar diversas operaciones:

# Hasta cálculos más complejos

library(ineq)         # Cargar el paquete ineq. Más adelante les explico la lógica 
                      # de los paquetes en R
    
ineq(mtcars$wt, 
     type="Gini")     # Calcular el índice de Ginni                  

Calcular

R nos permite realizar diversas operaciones:

# Hasta cálculos más complejos

library(ineq)         # Cargar el paquete ineq. Más adelante les explico la lógica 
                      # de los paquetes en R
    
ineq(mtcars$wt, 
     type="Gini")     # Calcular el índice de Gini                  
## [1] 0.1640012

Calcular

R nos permite realizar diversas operaciones:

# Hasta cálculos más complejos

lm(mpg ~ wt, data = mtcars)  # Modelos de regresión lineal

Calcular

R nos permite realizar diversas operaciones:

# Hasta cálculos más complejos

lm(mpg ~ wt, data = mtcars)  # Modelos de regresión lineal
## 
## Call:
## lm(formula = mpg ~ wt, data = mtcars)
## 
## Coefficients:
## (Intercept)           wt  
##      37.285       -5.344

Generar bases de datos

R nos permite generar bases de datos con diversas estructuras. Por ejemplo:

  • Vectores
c(11, 43, 7, 23.45) # Númerico o numeric
## [1] 11.00 43.00  7.00 23.45
c("manzana", "pera", "carnitas", "crema") # Texto o character
## [1] "manzana"  "pera"     "carnitas" "crema"

Generar bases de datos

R nos permite generar bases de datos con diversas estructuras. Por ejemplo:

  • Matrices

Generar bases de datos

R nos permite generar bases de datos con diversas estructuras. Por ejemplo:

  • Matrices
# Matriz de datos numéricos
matrix(c(1, 3, 4, 2, 8, 10), nrow = 2) 
##      [,1] [,2] [,3]
## [1,]    1    4    8
## [2,]    3    2   10

Generar bases de datos

R nos permite generar bases de datos con diversas estructuras. Por ejemplo:

  • Matrices
# Matriz de datos tipo texto o character
matrix(c("vaso", "llaves", "anillo", "lentes", "botella", "tarjeta"), ncol = 2) 
##      [,1]     [,2]     
## [1,] "vaso"   "lentes" 
## [2,] "llaves" "botella"
## [3,] "anillo" "tarjeta"

Generar bases de datos

R nos permite generar bases de datos con diversas estructuras. Por ejemplo:

  • Data frames

Generar bases de datos

R nos permite generar bases de datos con diversas estructuras. Por ejemplo:

  • Data frames
# Data frame con datos numéricos
data.frame(col_1 = c(1, 3, 4), col_2 = c(2, 8, 10)) 
##   col_1 col_2
## 1     1     2
## 2     3     8
## 3     4    10

Generar bases de datos

R nos permite generar bases de datos con diversas estructuras. Por ejemplo:

  • Data frames
# Data frame con datos numéricos y de texto
data.frame(col_1 = c(1, 3, 4), col_2 = c("lentes", "botella", "tarjeta")) 
##   col_1   col_2
## 1     1  lentes
## 2     3 botella
## 3     4 tarjeta

Cargar bases de datos

R nos permite cargar datos de manera flexible, ya que podemos:

  • Incorporar bases de datos en diferentes formatos (.csv, .xlsx, .dta, .sav, .json); y,
  • Cargarlas desde diferentes orígenes (disco local, web, API, servidores)

Cargar bases de datos

Archivo .csv desde el disco local

library(readr)     # Cargar el paquete readr

read_csv("02_datos/cemabe_cdmx.csv")     
## # A tibble: 8,601 x 267
##       X1 ID_INM    CLAVE_CT   ENT          NOM_ENT   MUN      NOM_MUN
##    <int>  <int>       <chr> <int>            <chr> <int>        <chr>
##  1     1 199533 09DPR3037W2     9 Distrito Federal     2 Azcapotzalco
##  2     2 199680 09DJN0776G7     9 Distrito Federal     2 Azcapotzalco
##  3     3 199529 09DJN0789K7     9 Distrito Federal     2 Azcapotzalco
##  4     4 199512 09DPR2446T7     9 Distrito Federal     2 Azcapotzalco
##  5     5 199679 09DST0027G1     9 Distrito Federal     2 Azcapotzalco
##  6     6 199493 09DPR3030C1     9 Distrito Federal     2 Azcapotzalco
##  7     7 199588 09DPR2882U5     9 Distrito Federal     2 Azcapotzalco
##  8     8 199635 09DJN0260K1     9 Distrito Federal     2 Azcapotzalco
##  9     9 199644 09FUA0010E1     9 Distrito Federal     2 Azcapotzalco
## 10    10 199651 09DES0294K1     9 Distrito Federal     2 Azcapotzalco
## # ... with 8,591 more rows, and 260 more variables: LOC <int>,
## #   NOM_LOC <chr>, AGEB <chr>, MZA <int>, NOMBRECT <chr>, NIVEL <int>,
## #   MODALIDAD <int>, TURNO <int>, CONTROL <int>, ENT_ADMON <int>,
## #   P4A <chr>, P4B <chr>, P4C <chr>, P4D <chr>, P4E <chr>, P4F <chr>,
## #   P4G <int>, P4H <chr>, P4I <chr>, P4J <chr>, P4K <chr>, P148A <int>,
## #   P148B <int>, P148C <int>, P148D <int>, P148E <int>, P148F <int>,
## #   P148G <int>, P148H <int>, P149 <int>, P150 <int>, P151 <chr>,
## #   P152 <int>, P153 <int>, P154 <chr>, P155 <int>, P156 <int>,
## #   P157 <int>, P158 <int>, P159 <int>, P160 <int>, P161 <int>,
## #   P162 <int>, P163 <int>, P164 <int>, P165 <int>, P166 <int>,
## #   P167 <int>, P168 <int>, P169 <int>, P170 <int>, P171 <int>,
## #   P172 <int>, P173 <int>, P174 <int>, P175 <int>, P176 <int>,
## #   P177 <int>, P178 <int>, P179 <int>, P180 <int>, P181 <int>,
## #   P182 <int>, P183 <int>, P184 <int>, P185 <int>, P186 <int>,
## #   P187 <int>, P188 <int>, P189 <int>, P190 <int>, P191 <int>,
## #   P192 <int>, P193 <int>, P194 <int>, P195 <int>, P196 <int>,
## #   P197 <int>, P198 <int>, P199 <int>, P200 <int>, P201 <int>,
## #   P202 <int>, P203 <int>, P204 <int>, P205 <int>, P206 <int>,
## #   P207 <int>, P208 <int>, P209 <int>, P210 <int>, P211 <int>,
## #   P212 <int>, P213 <int>, P214 <int>, P215 <int>, P216 <int>,
## #   P217 <int>, P218 <int>, P219 <int>, ...

Cargar bases de datos

Archivo .csv desde una página web

Cargar bases de datos

Archivo .csv desde una página web

library(readr)     # Cargar el paquete readr

read_csv("http://segasi.com.mx/clases/cide/vis_man/datos/cemabe_cdmx.csv")     

Cargar bases de datos

Archivo .csv desde una página web

library(readr)     # Cargar el paquete readr

read_csv("http://segasi.com.mx/clases/cide/vis_man/datos/cemabe_cdmx.csv")     
## # A tibble: 8,601 x 267
##       X1 ID_INM    CLAVE_CT   ENT          NOM_ENT   MUN      NOM_MUN
##    <int>  <int>       <chr> <int>            <chr> <int>        <chr>
##  1     1 199533 09DPR3037W2     9 Distrito Federal     2 Azcapotzalco
##  2     2 199680 09DJN0776G7     9 Distrito Federal     2 Azcapotzalco
##  3     3 199529 09DJN0789K7     9 Distrito Federal     2 Azcapotzalco
##  4     4 199512 09DPR2446T7     9 Distrito Federal     2 Azcapotzalco
##  5     5 199679 09DST0027G1     9 Distrito Federal     2 Azcapotzalco
##  6     6 199493 09DPR3030C1     9 Distrito Federal     2 Azcapotzalco
##  7     7 199588 09DPR2882U5     9 Distrito Federal     2 Azcapotzalco
##  8     8 199635 09DJN0260K1     9 Distrito Federal     2 Azcapotzalco
##  9     9 199644 09FUA0010E1     9 Distrito Federal     2 Azcapotzalco
## 10    10 199651 09DES0294K1     9 Distrito Federal     2 Azcapotzalco
## # ... with 8,591 more rows, and 260 more variables: LOC <int>,
## #   NOM_LOC <chr>, AGEB <chr>, MZA <int>, NOMBRECT <chr>, NIVEL <int>,
## #   MODALIDAD <int>, TURNO <int>, CONTROL <int>, ENT_ADMON <int>,
## #   P4A <chr>, P4B <chr>, P4C <chr>, P4D <chr>, P4E <chr>, P4F <chr>,
## #   P4G <int>, P4H <chr>, P4I <chr>, P4J <chr>, P4K <chr>, P148A <int>,
## #   P148B <int>, P148C <int>, P148D <int>, P148E <int>, P148F <int>,
## #   P148G <int>, P148H <int>, P149 <int>, P150 <int>, P151 <chr>,
## #   P152 <int>, P153 <int>, P154 <chr>, P155 <int>, P156 <int>,
## #   P157 <int>, P158 <int>, P159 <int>, P160 <int>, P161 <int>,
## #   P162 <int>, P163 <int>, P164 <int>, P165 <int>, P166 <int>,
## #   P167 <int>, P168 <int>, P169 <int>, P170 <int>, P171 <int>,
## #   P172 <int>, P173 <int>, P174 <int>, P175 <int>, P176 <int>,
## #   P177 <int>, P178 <int>, P179 <int>, P180 <int>, P181 <int>,
## #   P182 <int>, P183 <int>, P184 <int>, P185 <int>, P186 <int>,
## #   P187 <int>, P188 <int>, P189 <int>, P190 <int>, P191 <int>,
## #   P192 <int>, P193 <int>, P194 <int>, P195 <int>, P196 <int>,
## #   P197 <int>, P198 <int>, P199 <int>, P200 <int>, P201 <int>,
## #   P202 <int>, P203 <int>, P204 <int>, P205 <int>, P206 <int>,
## #   P207 <int>, P208 <int>, P209 <int>, P210 <int>, P211 <int>,
## #   P212 <int>, P213 <int>, P214 <int>, P215 <int>, P216 <int>,
## #   P217 <int>, P218 <int>, P219 <int>, ...

Cargar bases de datos

Archivo .xlsx desde el disco local

Cargar bases de datos

Archivo .xlsx desde el disco local

library(readxl)     # Cargar el paquete readxl

read_xls("02_datos/execum_2016/docentes_total.xlsx")     

Cargar bases de datos

Archivo .xlsx desde el disco local

library(readxl)     # Cargar el paquete readxl

# Carga desde el disco local
read_xls("02_datos/execum_2016/execum_2016/docentes_total.xlsx")     
## # A tibble: 46 x 13
##     X__1                                                    X__2 `2007`
##    <dbl>                                                   <chr>  <dbl>
##  1    NA                                        Total Nacional * 283523
##  2     1               BENEMERITA UNIVERSIDAD AUTONOMA DE PUEBLA   3264
##  3     2 CENTRO DE INVESTIGACION Y DE ESTUDIOS AVANZADOS DEL IPN    634
##  4     3                                 COLEGIO DE POSGRADUADOS    635
##  5     4                                    EL COLEGIO DE MEXICO    177
##  6     5                          INSTITUTO POLITECNICO NACIONAL   8771
##  7     6                         INSTITUTO TECNOLOGICO DE SONORA   1632
##  8     7              UNIVERSIDAD AUTONOMA AGRARIA ANTONIO NARRO    507
##  9     8            UNIVERSIDAD AUTONOMA BENITO JUAREZ DE OAXACA   1138
## 10     9                           UNIVERSIDAD AUTONOMA CHAPINGO    686
## # ... with 36 more rows, and 10 more variables: `2008` <dbl>,
## #   `2009` <dbl>, `2010` <dbl>, `2011` <dbl>, `2012` <dbl>, `2013` <dbl>,
## #   `2014` <dbl>, `2015` <dbl>, Abs. <dbl>, `%` <dbl>

Cargar bases de datos

Archivo .dta desde el disco local

library(haven)     # Cargar el paquete haven

# Carga desde el disco local
read_dta("02_datos/execum_2016/ensanut_2016/ensanut_obesidad_2016.dta")     
## # A tibble: 8,354 x 81
##    idinsert                folio   int entidad          desc_ent munici
##       <dbl>                <chr> <dbl>   <chr>             <chr>  <chr>
##  1  1083390 010010001209A0020131     1      01 01 AGUASCALIENTES    001
##  2  1083393 010010001209A0020161     1      01 01 AGUASCALIENTES    001
##  3  1082667 010010001209A0080071     2      01 01 AGUASCALIENTES    001
##  4  1082738 010010001209A0080101     1      01 01 AGUASCALIENTES    001
##  5  1083478 010010001209A0120041     1      01 01 AGUASCALIENTES    001
##  6  1083394 010010001209A0120121     1      01 01 AGUASCALIENTES    001
##  7  1083397 010010001209A0120171     2      01 01 AGUASCALIENTES    001
##  8  1082049 010010001209A0210011     1      01 01 AGUASCALIENTES    001
##  9  1082097 010010001209A0210051     1      01 01 AGUASCALIENTES    001
## 10  1082098 010010001209A0210081     1      01 01 AGUASCALIENTES    001
## # ... with 8,344 more rows, and 75 more variables: desc_mun <chr>,
## #   locali <chr>, desc_loc <chr>, manzana <chr>, ageb <chr>, inth <dbl>,
## #   maq <chr>, completa <dbl+lbl>, sexo <dbl+lbl>, edad_i <dbl>,
## #   edad <dbl>, meses <dbl>, intsel <dbl+lbl>, intsel2 <dbl+lbl>,
## #   peso <dbl+lbl>, peso2 <dbl+lbl>, ropa <dbl+lbl>, rpeso <dbl+lbl>,
## #   talla <dbl+lbl>, talla2 <dbl+lbl>, rtalla <dbl+lbl>, emb <dbl+lbl>,
## #   temb <dbl+lbl>, cintura <dbl+lbl>, cintura2 <dbl+lbl>,
## #   rcintura <dbl+lbl>, cadera <dbl+lbl>, cadera2 <dbl+lbl>,
## #   rcadera <dbl+lbl>, amputa <dbl+lbl>, ppeso <dbl+lbl>, panto <dbl+lbl>,
## #   panto2 <dbl+lbl>, rpanto <dbl+lbl>, rodilla <dbl+lbl>,
## #   rodilla2 <dbl+lbl>, rrodilla <dbl+lbl>, hemien <dbl+lbl>,
## #   hemien2 <dbl+lbl>, rhemien <dbl+lbl>, brazo <dbl+lbl>,
## #   brazo2 <dbl+lbl>, rbrazo <dbl+lbl>, sistol3 <dbl+lbl>,
## #   diastol3 <dbl+lbl>, sistol4 <dbl+lbl>, diastol4 <dbl+lbl>,
## #   tbrazo <dbl+lbl>, htension <chr>, rtension <dbl+lbl>,
## #   tiempo_gen <date>, origen <dbl+lbl>, c1 <dbl>, est_var <dbl>,
## #   region_h <dbl+lbl>, code_upm <chr>, rural <dbl+lbl>, ponde_f <dbl>,
## #   pesoprom <dbl>, tallaprom <dbl>, grupoednut <dbl+lbl>, imc <dbl>,
## #   edadmeses <dbl>, imc_valid <dbl>, imc_valid_clas <dbl+lbl>,
## #   imc_valid_clas_sp_mas_ob <dbl+lbl>, prom_peso <dbl>, prom_talla <dbl>,
## #   talla_m <dbl>, talla_m2 <dbl>, imc2 <dbl>, imc_cat <dbl>,
## #   prom_cintura <dbl>, ob_ab_idf <dbl>, edad_decil <dbl+lbl>

Visualizar datos

Una de las principales fortalezas de R son sus gráficas y mapas.

R nos permite controlar hasta el más mínimo detalle de una visualización.

Los resultados pueden ser de una gran calidad.

Visualizar datos

Ejemplo con R base

plot(diamonds$carat, diamonds$price,   # diamonds es un df precargado en ggplot2
     main = "Relación entre el número de carats de un diamante y su precio", 
     xlab = "Número de carats",
     ylab = "Precio")

Visualizar datos

Visualizar datos

Ejemplo con ggplot2

library(ggplot2)     #  Cargar paquete ggplot2

ggplot(diamonds, aes(x = carat, y = price)) +
  geom_point() +
  coord_cartesian(ylim = c(0, 20000)) +
  labs(title = "Relación entre el número de carats de un diamante y su precio",
       x = "Número de carats",
       y = "Precio")
  )

Visualizar datos

Visualizar datos

Visualizar datos

Visualizar datos

Guardar "cosas"

R nos permite guardar en su memoria temporal "cosas".

La lista de "cosas" es enorme e incluye:

Guardar "cosas"

  • Resultados de cálculos
suma <- 7 + 4  
suma
## [1] 11
  • Variables
x <- c(41, 5, 76)
x
## [1] 41  5 76

Guardar "cosas"

  • Matrices y data frames
soy_una_matriz <- matrix(c(1, 3, 4, 2, 8, 10), nrow = 2) 
soy_una_matriz
##      [,1] [,2] [,3]
## [1,]    1    4    8
## [2,]    3    2   10

Guardar "cosas"

  • Matrices y data frames
soy_un_df <- data.frame(col_1 = c(1, 3, 4), col_2 = c(2, 8, 10)) 
soy_un_df
##   col_1 col_2
## 1     1     2
## 2     3     8
## 3     4    10

Guardar "cosas"

  • Gráficas
g <- ggplot(diamonds, aes(x = carat, y = price)) + 
  geom_point()

Guardar "cosas"

g <- ggplot(diamonds, aes(x = carat, y = price)) +
  geom_point()
g

Guardar "cosas"

  • Bases de datos
bd <- read_csv("http://segasi.com.mx/clases/cide/vis_man/datos/cemabe_cdmx.csv")     
## Warning: Missing column names filled in: 'X1' [1]
## Parsed with column specification:
## cols(
##   .default = col_integer(),
##   CLAVE_CT = col_character(),
##   NOM_ENT = col_character(),
##   NOM_MUN = col_character(),
##   NOM_LOC = col_character(),
##   AGEB = col_character(),
##   NOMBRECT = col_character(),
##   P4A = col_character(),
##   P4B = col_character(),
##   P4C = col_character(),
##   P4D = col_character(),
##   P4E = col_character(),
##   P4F = col_character(),
##   P4H = col_character(),
##   P4I = col_character(),
##   P4J = col_character(),
##   P4K = col_character(),
##   P151 = col_character(),
##   P154 = col_character(),
##   P264B = col_character(),
##   P264C = col_character()
##   # ... with 21 more columns
## )
## See spec(...) for full column specifications.

Guardar "cosas"

bd
## # A tibble: 8,601 x 267
##       X1 ID_INM    CLAVE_CT   ENT          NOM_ENT   MUN      NOM_MUN
##    <int>  <int>       <chr> <int>            <chr> <int>        <chr>
##  1     1 199533 09DPR3037W2     9 Distrito Federal     2 Azcapotzalco
##  2     2 199680 09DJN0776G7     9 Distrito Federal     2 Azcapotzalco
##  3     3 199529 09DJN0789K7     9 Distrito Federal     2 Azcapotzalco
##  4     4 199512 09DPR2446T7     9 Distrito Federal     2 Azcapotzalco
##  5     5 199679 09DST0027G1     9 Distrito Federal     2 Azcapotzalco
##  6     6 199493 09DPR3030C1     9 Distrito Federal     2 Azcapotzalco
##  7     7 199588 09DPR2882U5     9 Distrito Federal     2 Azcapotzalco
##  8     8 199635 09DJN0260K1     9 Distrito Federal     2 Azcapotzalco
##  9     9 199644 09FUA0010E1     9 Distrito Federal     2 Azcapotzalco
## 10    10 199651 09DES0294K1     9 Distrito Federal     2 Azcapotzalco
## # ... with 8,591 more rows, and 260 more variables: LOC <int>,
## #   NOM_LOC <chr>, AGEB <chr>, MZA <int>, NOMBRECT <chr>, NIVEL <int>,
## #   MODALIDAD <int>, TURNO <int>, CONTROL <int>, ENT_ADMON <int>,
## #   P4A <chr>, P4B <chr>, P4C <chr>, P4D <chr>, P4E <chr>, P4F <chr>,
## #   P4G <int>, P4H <chr>, P4I <chr>, P4J <chr>, P4K <chr>, P148A <int>,
## #   P148B <int>, P148C <int>, P148D <int>, P148E <int>, P148F <int>,
## #   P148G <int>, P148H <int>, P149 <int>, P150 <int>, P151 <chr>,
## #   P152 <int>, P153 <int>, P154 <chr>, P155 <int>, P156 <int>,
## #   P157 <int>, P158 <int>, P159 <int>, P160 <int>, P161 <int>,
## #   P162 <int>, P163 <int>, P164 <int>, P165 <int>, P166 <int>,
## #   P167 <int>, P168 <int>, P169 <int>, P170 <int>, P171 <int>,
## #   P172 <int>, P173 <int>, P174 <int>, P175 <int>, P176 <int>,
## #   P177 <int>, P178 <int>, P179 <int>, P180 <int>, P181 <int>,
## #   P182 <int>, P183 <int>, P184 <int>, P185 <int>, P186 <int>,
## #   P187 <int>, P188 <int>, P189 <int>, P190 <int>, P191 <int>,
## #   P192 <int>, P193 <int>, P194 <int>, P195 <int>, P196 <int>,
## #   P197 <int>, P198 <int>, P199 <int>, P200 <int>, P201 <int>,
## #   P202 <int>, P203 <int>, P204 <int>, P205 <int>, P206 <int>,
## #   P207 <int>, P208 <int>, P209 <int>, P210 <int>, P211 <int>,
## #   P212 <int>, P213 <int>, P214 <int>, P215 <int>, P216 <int>,
## #   P217 <int>, P218 <int>, P219 <int>, ...

Guardar "cosas"

¿Para que nos sirve guardar estas "cosas" en la memoria de R?

Para reutilizarlas.

Por ejemplo:

Guardar "cosas"

x <- c(7, 8, 1)
y <- c(72, 18, 41)
x + y
## [1] 79 26 42

Guardar "cosas"

soy_un_df <- data.frame(col_1 = c(1, 3, 4), col_2 = c(2, 8, 10)) 
soy_un_df[, 2]   # Seleccion la segunda columna a la "antigüita"
## [1]  2  8 10

Guardar "cosas"

g <- ggplot(diamonds, aes(x = carat, y = price)) +
  geom_point()

Guardar "cosas"

g + theme_minimal()

Guardar "cosas"

Cada vez que "guardamos" alguna cosa en R generamos un objeto.

Estos objetos "viviran" en la memoria de R mientras dure nuestra sesión de trabajo.

Por ello, en términos estrictos, en R no guardamos "cosas", sino que las asignamos temporalmente a un objeto.

R y los paquetes

R y los paquetes

Por default, R viene con muchos paquetes y funciones precargadas.

El más importante de ellos es el paquete base.

R y los paquetes

Por default, R viene con muchos paquetes y funciones precargadas.

El más importante de ellos es el paquete base.

Con el tiempo, se han desarrollado diversos paquetes para mejorar y/o extender las capacidades de R.

R y los paquetes

Hay dos formas de instalar y cargar paquetes:

  • Desde la consola
install.packages("tidyverse") # Instalar

library(tidyverse) # Cargar

R y los paquetes

Hay dos formas de instalar y cargar paquetes:

  • Desde la interfaz de RStudio.

R y los paquetes

Hay dos formas de instalar y cargar paquetes.

Ojo: Cada vez que inicien una sesión deben cargar los paquetes que utilizarán en la misma.

Un paréntesis filosófico

Tipos de datos

Tipos de datos

El tipo de datos y la estructura de los datos que utilizamos en R condiciona lo que podemos hacer con ellos.

Tipos de datos

Existen diversos tipos de datos en R.

En este taller nos concentraremos en cinco:

  • numeric
  • integer
  • character
  • factor
  • logical

Tipos de datos: numeric

En la mayor parte de los casos, R considera a los números como datos de tipo numeric.

# Número decimal
decimal <- 10.5
class(decimal)
## [1] "numeric"
# Número entero
entero <- 10
class(entero)
## [1] "numeric"

Tipos de datos: integer

Sin embargo, en ciertas ocasiones R considera a los números enteros como datos integer.

Ejemplo: Base de datos de las IESP

# Opción 2: Cargar bd utilizando URL
bd_iesp <- read.csv(
  url("http://segasi.com.mx/clases/cide/vis_man/datos/bd_iesp_07_10.csv")
  )

str(bd_iesp)   # Analizar la estructura de la bd
## 'data.frame':    129 obs. of  8 variables:
##  $ yr      : int  2007 2008 2009 2007 2008 2009 2007 2008 2009 2007 ...
##  $ inst    : Factor w/ 43 levels "Benemerita Universidad Autonoma de Puebla",..: 1 1 1 2 2 2 3 3 3 4 ...
##  $ acronimo: Factor w/ 43 levels "BUAP","CINVESTAV",..: 1 1 1 2 2 2 4 4 4 3 ...
##  $ d1      : int  3264 3141 3169 634 544 566 635 610 379 177 ...
##  $ m1      : int  44545 45524 50088 1844 2004 2109 852 843 855 331 ...
##  $ pa1     : int  170 162 139 56 54 54 38 37 33 18 ...
##  $ s2      : num  2042 2069 2210 1657 1754 ...
##  $ tipo    : Factor w/ 2 levels "Estatal","Federal": 1 1 1 2 2 2 2 2 2 2 ...

Tipos de datos: integer

Sin embargo, en ciertas ocasiones R considera a los números enteros como datos integer.

Ejemplo: Base de datos de las IESP

Si queremos guardar una variable como integer debemos utilizar la función as.integer()

Tipos de datos: integer

# Número entero
entero <- 10
class(entero)
## [1] "numeric"
# Número entero, transformado con as.integer()
entero <- 10
entero <- as.integer(entero)
class(entero)
## [1] "integer"

Tipos de datos: character

Cuando generamos una variable que incluye texto, por lo general R la considera como datos de tipo character.

# Variable de texto
texto <- "Soy un breve pero feliz texto."
class(texto)
## [1] "character"

Tipos de datos: character

Ojo: Las comillas son muy poderosas en R

# Aquí soy numeric
entero <- 10
class(entero)
## [1] "numeric"
# Pero si me pones comillas, me transformo en character
entero <- "10"
class(entero)
## [1] "character"

Tipos de datos: factor

En ocasiones deseamos especificar que una variable que contiene texto, debe se tratada como una variable categórica.

Ejemplo: género, entidad, nivel educativo, etc.

Esto es útil para, entre otras cosas:

  • Ordenar/colorear ciertos elementos de una vis
  • Segmentar/dividir una base de datos o su análisis.

Tipos de datos: factor

Si queremos definir una variable de texto como factor hay dos opciones.

# Si la variable fue creada primero como character, hay que transfomarla a factor
iesp_grandota <- "UNAM"
class(iesp_grandota) # Soy un dato de tipo character :(
## [1] "character"
# Pero ahora me van a convertir en un dato de tipo factor :D
iesp_grandota <- as.factor("UNAM")
class(iesp_grandota)
## [1] "factor"

Tipos de datos: factor

Si queremos definir una variable de texto como factor hay dos opciones.

# Si la variable aún no ha sido creada, hay que especificar desde el comienzo que
# queremos considerarla como factor

# Voy a ser un dato de tipo factor desde mi nacimiento :)
iesp_grandota <- as.factor("UNAM")
class(iesp_grandota)
## [1] "factor"

Tipos de datos: factor

R considera cada categoría de un factor como un level o nivel.

R siempre ordena los levels alfabéticamente y asigna un número (que no vemos) a cada nivel.

Tipos de datos: factor

Para conocer el número de niveles que tiene un factor, utilizar la función nlevels()

# Explorar los nombres en la base de datos bd_iesp
names(bd_iesp)
## [1] "yr"       "inst"     "acronimo" "d1"       "m1"       "pa1"     
## [7] "s2"       "tipo"
# ¿Cuántos niveles tiene la variable "acronimo"?
nlevels(bd_iesp$acronimo)
## [1] 43

Tipos de datos: factor

Para conocer el tipo de niveles que tiene un factor, utilizar la función levels()

# ¿Qué tipo de niveles tiene la variable "acronimo"?
levels(bd_iesp$acronimo)
##  [1] "BUAP"              "CINVESTAV"         "COLMEX"           
##  [4] "COLPOS"            "IPN"               "IT Sonora"        
##  [7] "U de Colima"       "U de G"            "U de Guanajuato"  
## [10] "U Veracruzana"     "UA Aguascalientes" "UA Campeche"      
## [13] "UA Cd. Juárez"     "UA Chapingo"       "UA Chiapas"       
## [16] "UA Chihuahua"      "UA Coahuila"       "UA del Carmen"    
## [19] "UA Guerrero"       "UA Nayarit"        "UA Querétaro"     
## [22] "UA Sinaloa"        "UA Tamaulipas"     "UA Tlaxcala"      
## [25] "UA Yucatán"        "UA Zacatecas"      "UAAAN"            
## [28] "UABC"              "UABCS"             "UABJ Oaxaca"      
## [31] "UAE Hidalgo"       "UAE México"        "UAE Morelos"      
## [34] "UAM"               "UANL"              "UASLP"            
## [37] "UJA Tabasco"       "UJE Durango"       "UMSNH"            
## [40] "UNAM"              "UNISON"            "UPN"              
## [43] "UQRoo"

Tipos de datos: logical

Generalmente, los datos de tipo logical son creados al comparar dos variables o analizar su tipo.

x = 1      # Soy una (espantosa) x
y = 2      # Soy una y (y el doble de la x)
z <- x > y # ¿x es más grande que y? Guardar respuesta en z
z          # Imprimir el dato z
## [1] FALSE
class(z)   # ¿Qué tipo de dato es z?
## [1] "logical"

Tipos de datos: logical

bd_iesp <- read.csv(
  url("http://segasi.com.mx/clases/cide/vis_man/datos/bd_iesp_07_10.csv")
  ) # Ojo: Noten que estoy usando read.csv(), no read_csv()

is.numeric(bd_iesp$s2) # ¿La variable "s2" es de tipo numeric?
## [1] TRUE
is.character(bd_iesp$inst) # ¿La variable "inst" es de tipo character?
## [1] FALSE

Tipos de datos: logical

bd_iesp <- read.csv(
  url("http://segasi.com.mx/clases/cide/vis_man/datos/bd_iesp_07_10.csv")
  ) # Ojo: Noten que estoy usando read.csv(), no read_csv()

is.na(bd_iesp$acronimo) # ¿Algún valor de la variable "acronimo" es de tipo NA?
##   [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [12] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [23] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [34] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [45] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [56] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [67] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [78] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [89] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [100] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [111] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [122] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

Transformación del tipo de un dato

Existen diversas funciones que nos permiten transformar el tipo de un dato:

as.numeric() # Guardar dato como numeric
as.integer() # Guardar dato como integer
as.character() # Guardar dato como character
as.factor() # Guardar dato como factor

Estructuras de datos

Estructuras de datos: Vectores

Los vectores son la estructura de datos más básica y común en R.

Son el principal caballo de batalla.

Definición: un vector es un grupo o colección de valores almacenados como un solo objeto.

Estructuras de datos: Vectores

Existen diversas funciones para construir un vector:

  • c() - Combinar datos numéricos o caracteres
  • seq() - Secuencia de valores numéricos
  • rep() - Secuencia de valores numéricos repetidos
  • a:b - Secuencia consecutiva de valores numéricos

Estructuras de datos: Vectores

Ejemplos con c():

c(4, 137, 68) # Soy un vector numérico
## [1]   4 137  68
sr_vector_num <- c(4, 137, 68) # Ahora tengo nombre porque me guardaron en un objeto :D
sr_vector_num
## [1]   4 137  68

¿Cómo acordarse de c()? -> c de combinar.

Estructuras de datos: Vectores

Ejemplos con c() y una variable character:

c("Quen", "Pon", "Po") # Soy un vector de caracteres 
## [1] "Quen" "Pon"  "Po"
# Noten las " ". 
# Si no las incluyen, R asumirá que cada palabra se refiere a un objeto.
c(Quen, Pon, Po)  
#Error: object 'Quen' not found
sr_vector_car <- c("Quen", "Pon", "Po") # Y me llamo...
sr_vector_car

Estructuras de datos: Vectores

Ejemplos con seq():

# Argumentos de la función

seq([Valor inicial], 
    [Valor final], 
    [Magnitud de los "brincos"])
seq(8,      # Valor inicial 
    436,    # Valor (máximo) final
    16)     # Magnitud de los "brincos"
##  [1]   8  24  40  56  72  88 104 120 136 152 168 184 200 216 232 248 264
## [18] 280 296 312 328 344 360 376 392 408 424

Estructuras de datos: Vectores

Ejemplos con rep():

# Argumentos de la función

rep([Dato(s) a repetir], 
    [Núm. de veces que se debe(n) repetir]) 
# Ejemplo con un solo dato a repetir

rep(8,     # Dato(s) a repetir
    30)    # Núm. de veces que se debe(n) repetir
##  [1] 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8

Estructuras de datos: Vectores

Ejemplos con rep()

# Ejemplo con más de un dato a repetir

rep(c(8,67,5),      # Dato(s) a repetir
    10)    # Núm. de veces que se debe(n) repetir
##  [1]  8 67  5  8 67  5  8 67  5  8 67  5  8 67  5  8 67  5  8 67  5  8 67
## [24]  5  8 67  5  8 67  5

Estructuras de datos: Vectores

Ejemplos con a:b

1:16
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16
4:20
##  [1]  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20

Estructuras de datos: Vectores

Regla básica: vectores siempre deben contener el mismo tipo de datos (numeric, character, factor o logical).

vector <- c("Quen", 1, 345) # ¿Qué tipo de vector seré?

OJO: Si mezclan datos character con algún otro tipo, R asumirá que todos los datos son…

class(vector)
## [1] "character"

Estructuras de datos: Vectores

vector <- c(as.factor("casa"), 2, 76, FALSE) # ¿Qué tipo de vector seré?
                                             
                                             # ¡Que nervio! 

OJO 2: Si mezclan datos factor y/o logical con datos numeric, R asumirá que todos los datos son…

class(vector)
## [1] "numeric"

Estructuras de datos: Vectores

Ahora, noten la diferencia:

vector <- c(as.factor("casa"), 2, 76, FALSE)
vector_1 <- c(as.factor("casa"), 2, 76, "FALSE")
class(vector)
## [1] "numeric"
class(vector_1)
## [1] "character"

Estructuras de datos: Vectores

¿Por qué pasa esto en el caso del vector c(as.factor("casa"), 2, 76, FALSE)?

Porque cuando R detecta datos numeric y NO detecta datos character, transforma los datos de tipo factor y logical en números.

Estructuras de datos: Vectores

Datos factor

  • El resultado de la transformación de R será el nivel del factor correspondiente (en este caso 1).

Datos logical

  • Aunque no lo vemos, R siempre asigna valores númericos a los valores TRUE y FALSE.
TRUE = 1
FALSE = 0

Estructuras de datos: Vectores

En consecuencia, ¿cuál creen que sea el resultado de esta operación?

misterio_sin_resolver <- sum(c(FALSE, TRUE, TRUE, FALSE, TRUE, FALSE))
misterio_sin_resolver
## [1] 3

Esto porque hay tres TRUE en el vector que sumamos.

Estructuras de datos: Matrices

Las matrices se crean combinando vectores del mismo tipo y dimensiones.

Estructuras de datos: Matrices

Las matrices se crean combinando vectores del mismo tipo y dimensiones.

Para ello, existen diferentes funciones.

Por ejemplo, podemos usar cbind() o rbind().

Estructuras de datos: Matrices

# Ejemplo con cbind() - Column bind

a <- c(34, 26, 89) # Soy un vector
b <- c(1, 22, 18) # Soy otro vector

matriz <-  cbind(a, b)
matriz
##       a  b
## [1,] 34  1
## [2,] 26 22
## [3,] 89 18

Estructuras de datos: Matrices

# Ejemplo con rbind() - Row bind

a <- c(34, 26, 89) # Soy un vector
b <- c(1, 22, 18) # Soy otro vector

matriz <-  rbind(a, b)
matriz
##   [,1] [,2] [,3]
## a   34   26   89
## b    1   22   18

Estructuras de datos: Matrices

Ejemplo con vectores character:

a <- c("bajo", "medio", "alto") 
b <- c("azul", "rojo", "blanco")

matriz <-  cbind(a, b)
matriz
##      a       b       
## [1,] "bajo"  "azul"  
## [2,] "medio" "rojo"  
## [3,] "alto"  "blanco"

Estructuras de datos: Matrices

Si combinamos vectores numeric y character o factor en una matriz, R asumirá que todos los vectores son character o factor.

a <- c(34, 26, 89) # Soy un vector numeric
b <- c("azul", "rojo", "blanco") # Soy un vector character

matriz <-  cbind(a, b)
matriz
##      a    b       
## [1,] "34" "azul"  
## [2,] "26" "rojo"  
## [3,] "89" "blanco"

Estructuras de datos: Matrices

Si combinamos vectores de diferentes dimensiones en una matriz, R:

  • Nos advertirá de esto; y,
  • Reciclará los valores del vector de menores dimensiones.

Estructuras de datos: Matrices

a <- c(34, 26, 89) # Soy un vector con tres valores
b <- c(34, 26, 89, 13, 45)  # Soy un vector con cinco valores

matriz <-  cbind(a, b)
## Warning in cbind(a, b): number of rows of result is not a multiple of
## vector length (arg 1)
matriz
##       a  b
## [1,] 34 34
## [2,] 26 26
## [3,] 89 89
## [4,] 34 13
## [5,] 26 45

Estructuras de datos: Matrices

Otra forma de construir matrices: matrix()

matriz <- matrix(c(34, 67, 89, 1, 45, 90, 10, 34), 
                     nrow = 2, # Número de renglones
                     ncol = 4) # Número de columnas
matriz
##      [,1] [,2] [,3] [,4]
## [1,]   34   89   45   10
## [2,]   67    1   90   34

Estructuras de datos: Matrices

matriz <- matrix(c(34, 67, 89, 1, 45, 90, 10, 34), 
                     nrow = 2) # Sólo número de renglones
matriz
##      [,1] [,2] [,3] [,4]
## [1,]   34   89   45   10
## [2,]   67    1   90   34
matriz <- matrix(c(34, 67, 89, 1, 45, 90, 10, 34), 
                     ncol = 4) # Sólo número de columnas
matriz
##      [,1] [,2] [,3] [,4]
## [1,]   34   89   45   10
## [2,]   67    1   90   34

Estructuras de datos: Matrices

¿Qué pasa si no especificamos el número de renglones o columnas?

matriz <- matrix(c(34, 67, 89, 1, 45, 90, 10, 34))
matriz
##      [,1]
## [1,]   34
## [2,]   67
## [3,]   89
## [4,]    1
## [5,]   45
## [6,]   90
## [7,]   10
## [8,]   34

Estructuras de datos: Data frames

Al igual que las matrices, los data frames se crean combinando vectores.

La gran diferencia respecto a las matrices es que un data frames puede ser integrado por vectores de diferente tipo.

Estructuras de datos: Data frames

Para generar un data frame, hay dos opciones:

  • La función data.frame() del paquete base
  • La función data_frame() del paquete tibble

Estructuras de datos: Data frames

Con data.frame():

edad <- c(34, 26, 89) # Soy un vector y seré la primera columna
color <- c("azul", "rojo", "blanco") # Soy otro vector y seré la segunda columna
d.f <-  data.frame(edad, color)
d.f
##   edad  color
## 1   34   azul
## 2   26   rojo
## 3   89 blanco

Estructuras de datos: Data frames

También podemos definir los vectores directamente dentro de data.frame():

d.f <-  data.frame(edad = c(34, 26, 89), 
                  color = c("azul", "rojo", "blanco"))
d.f
##   edad  color
## 1   34   azul
## 2   26   rojo
## 3   89 blanco

Dentro de data.frame() usamos "=", no "<-".

Estructuras de datos: Data frames

Con data_frame():

library(tibble)       # O, en su caso, al cargar tidyverse

d_f <-  data_frame(edad = c(34, 26, 89), 
                  color = c("azul", "rojo", "blanco"))

d_f
## # A tibble: 3 x 2
##    edad  color
##   <dbl>  <chr>
## 1    34   azul
## 2    26   rojo
## 3    89 blanco

Estructuras de datos: Data frames

*Ustedes piensan:*

  • "Pos se ven igual el data.frame() y data_frame(), ¿no?"

*Yo les respondo (telepáticamente):*

  • "Pos no"

Estructuras de datos: Data frames

A diferencia de data.frame(), la función data_frame():

  • Genera versión moderna de data frames: tibble.

A las pruebas me remito…

Vamos a usar el mismo archivo, pero descargándolo con read.csv() y read_csv().

Los archivos cargados con:

  • read.csv() guardan la bd con data.frames()
  • read_csv() guardan la bd con data_frames()

A las pruebas me remito…

# Con read.csv()
b.d <- read.csv(url("http://segasi.com.mx/clases/cide/vis_man/datos/bd_iesp_07_10.csv"))

# Con read_csv()
library(readr)     # Cargar readr

b_d <- read_csv("http://segasi.com.mx/clases/cide/vis_man/datos/bd_iesp_07_10.csv")
class(b.d)
## [1] "data.frame"
class(b_d)
## [1] "tbl_df"     "tbl"        "data.frame"

Estructuras de datos: Data frames

A diferencia de data.frame(), la función data_frame():

  • Genera versión moderna de data frames: tibble.
  • Nunca cambia el tipo de un dato o vector (p. ej., de character a factor).

A las pruebas me remito…

str(b.d)
## 'data.frame':    129 obs. of  8 variables:
##  $ yr      : int  2007 2008 2009 2007 2008 2009 2007 2008 2009 2007 ...
##  $ inst    : Factor w/ 43 levels "Benemerita Universidad Autonoma de Puebla",..: 1 1 1 2 2 2 3 3 3 4 ...
##  $ acronimo: Factor w/ 43 levels "BUAP","CINVESTAV",..: 1 1 1 2 2 2 4 4 4 3 ...
##  $ d1      : int  3264 3141 3169 634 544 566 635 610 379 177 ...
##  $ m1      : int  44545 45524 50088 1844 2004 2109 852 843 855 331 ...
##  $ pa1     : int  170 162 139 56 54 54 38 37 33 18 ...
##  $ s2      : num  2042 2069 2210 1657 1754 ...
##  $ tipo    : Factor w/ 2 levels "Estatal","Federal": 1 1 1 2 2 2 2 2 2 2 ...

A las pruebas me remito…

str(b_d)
## Classes 'tbl_df', 'tbl' and 'data.frame':    129 obs. of  8 variables:
##  $ yr      : int  2007 2008 2009 2007 2008 2009 2007 2008 2009 2007 ...
##  $ inst    : chr  "Benemerita Universidad Autonoma de Puebla" "Benemerita Universidad Autonoma de Puebla" "Benemerita Universidad Autonoma de Puebla" "Centro de Investigacion y de Estudios Avanzados del IPN" ...
##  $ acronimo: chr  "BUAP" "BUAP" "BUAP" "CINVESTAV" ...
##  $ d1      : int  3264 3141 3169 634 544 566 635 610 379 177 ...
##  $ m1      : int  44545 45524 50088 1844 2004 2109 852 843 855 331 ...
##  $ pa1     : int  170 162 139 56 54 54 38 37 33 18 ...
##  $ s2      : num  2042 2069 2210 1657 1754 ...
##  $ tipo    : chr  "Estatal" "Estatal" "Estatal" "Federal" ...
##  - attr(*, "spec")=List of 2
##   ..$ cols   :List of 8
##   .. ..$ yr      : list()
##   .. .. ..- attr(*, "class")= chr  "collector_integer" "collector"
##   .. ..$ inst    : list()
##   .. .. ..- attr(*, "class")= chr  "collector_character" "collector"
##   .. ..$ acronimo: list()
##   .. .. ..- attr(*, "class")= chr  "collector_character" "collector"
##   .. ..$ d1      : list()
##   .. .. ..- attr(*, "class")= chr  "collector_integer" "collector"
##   .. ..$ m1      : list()
##   .. .. ..- attr(*, "class")= chr  "collector_integer" "collector"
##   .. ..$ pa1     : list()
##   .. .. ..- attr(*, "class")= chr  "collector_integer" "collector"
##   .. ..$ s2      : list()
##   .. .. ..- attr(*, "class")= chr  "collector_double" "collector"
##   .. ..$ tipo    : list()
##   .. .. ..- attr(*, "class")= chr  "collector_character" "collector"
##   ..$ default: list()
##   .. ..- attr(*, "class")= chr  "collector_guess" "collector"
##   ..- attr(*, "class")= chr "col_spec"

A las pruebas me remito…

Por default, data.frame() (y read.csv()) asume que todas las variables que incluyan cadenas de texto son de tipo factor.

Si quieren evitar esto, deben establecer el argumento stringsAsFactors = FALSE.

data.frame(..., 
           stringsAsFactors = FALSE)

read.csv(..., 
           stringsAsFactors = FALSE)

Estructuras de datos: Data frames

A diferencia de data.frame(), la función data_frame():

  • Genera versión moderna de data frames: tibble.
  • Nunca cambia el tipo de un dato o vector (p. ej., de character a factor).
  • Permite que nombres de variables empiecen con números o caracteres especiales (R base no lo permite)

A las pruebas me remito…

#  Con data.frame()
d.f_1 <- data.frame(1980 = c(10, 20, 30),
                     1981 = c(30, 20, 10),
                     1982 = c(0, 0, 0))

# Error: unexpected '=' in "prueba_1 <- data.frame(1980 ="
d.f_2 <- data.frame(`1980` = c(10, 20, 30),
                     `1981` = c(30, 20, 10),
                     `1982` = c(0, 0, 0))

d.f_2
##   X1980 X1981 X1982
## 1    10    30     0
## 2    20    20     0
## 3    30    10     0

A las pruebas me remito…

#  Ahora con data_frame()
d_f_2 <- data_frame(`1980` = c(10, 20, 30),
                     `1981` = c(30, 20, 10),
                     `1982` = c(0, 0, 0))

d_f_2
## # A tibble: 3 x 3
##   `1980` `1981` `1982`
##    <dbl>  <dbl>  <dbl>
## 1     10     30      0
## 2     20     20      0
## 3     30     10      0

Estructuras de datos: Data frames

A diferencia de data.frame(), la función data_frame():

  • Genera versión moderna de data frames: tibble.
  • Nunca cambia el tipo de un dato o vector (p. ej., de character a factor).
  • Permite que nombres de variables empiecen con números o caracteres especiales (R base no lo permite)
  • Nunca cambia el nombre de las variables

A las pruebas me remito…

d.f_2 #  Con data.frame()
##   X1980 X1981 X1982
## 1    10    30     0
## 2    20    20     0
## 3    30    10     0
d_f_2 #  Con data_frame()
## # A tibble: 3 x 3
##   `1980` `1981` `1982`
##    <dbl>  <dbl>  <dbl>
## 1     10     30      0
## 2     20     20      0
## 3     30     10      0

Estructuras de datos: Data frames

A diferencia de data.frame(), la función data_frame():

  • Genera versión moderna de data frames: tibble.
  • Nunca cambia el tipo de un dato o vector (p. ej., de character a factor).
  • Permite que nombres de variables empiecen con números o caracteres especiales (R base no lo permite)
  • Nunca cambia el nombre de las variables
  • La forma en que R los imprime

A las pruebas me remito…

b.d   # OJO: No muestro la columna "inst" 
##       yr          acronimo    d1     m1 pa1        s2    tipo
## 1   2007              BUAP  3264  44545 170  2041.530 Estatal
## 2   2008              BUAP  3141  45524 162  2069.220 Estatal
## 3   2009              BUAP  3169  50088 139  2209.790 Estatal
## 4   2007         CINVESTAV   634   1844  56  1657.250 Federal
## 5   2008         CINVESTAV   544   2004  54  1754.020 Federal
## 6   2009         CINVESTAV   566   2109  54  1818.780 Federal
## 7   2007            COLPOS   635    852  38   837.388 Federal
## 8   2008            COLPOS   610    843  37   881.013 Federal
## 9   2009            COLPOS   379    855  33   799.195 Federal
## 10  2007            COLMEX   177    331  18   504.647 Federal
## 11  2008            COLMEX   179    357  18   443.303 Federal
## 12  2009            COLMEX   184    369  18   455.061 Federal
## 13  2007               IPN  8771  84816 176  9018.840 Federal
## 14  2008               IPN  9027  87225 189  9593.430 Federal
## 15  2009               IPN  9537  91426 198  9959.150 Federal
## 16  2007         IT Sonora  1632  14735  73   220.329 Estatal
## 17  2008         IT Sonora  1632  14735  73   227.793 Estatal
## 18  2009         IT Sonora  1632  14807  76   242.269 Estatal
## 19  2007             UAAAN   507   4071  36   702.954 Federal
## 20  2008             UAAAN   512   4537  34   673.290 Federal
## 21  2009             UAAAN   484   4746  33   739.929 Federal
## 22  2007       UABJ Oaxaca  1138  18885  41   432.702 Estatal
## 23  2008       UABJ Oaxaca  1221  18698  52   451.419 Estatal
## 24  2009       UABJ Oaxaca  1395  18560  49   505.264 Estatal
## 25  2007       UA Chapingo   686   4019  45  1730.000 Federal
## 26  2008       UA Chapingo   713   4125  44  1789.990 Federal
## 27  2009       UA Chapingo   732   4093  45  1899.090 Federal
## 28  2007 UA Aguascalientes  1422  11660 100   449.535 Estatal
## 29  2008 UA Aguascalientes  1418  11548 115   455.806 Estatal
## 30  2009 UA Aguascalientes  1384  11674 111   473.601 Estatal
## 31  2007              UABC  3351  35067 159   913.368 Estatal
## 32  2008              UABC  3860  38004 145   910.845 Estatal
## 33  2009              UABC  3141  41768 151   956.367 Estatal
## 34  2007             UABCS   382   5330  41   213.757 Estatal
## 35  2008             UABCS   426   4890  39   215.510 Estatal
## 36  2009             UABCS   568   4805  40   225.499 Estatal
## 37  2007       UA Campeche   437   5177  34   321.097 Estatal
## 38  2008       UA Campeche   426   5424  63   340.539 Estatal
## 39  2009       UA Campeche   452   5898  66   355.487 Estatal
## 40  2007        UA Chiapas  1467  18486 110   518.367 Estatal
## 41  2008        UA Chiapas  1576  18754  99   521.721 Estatal
## 42  2009        UA Chiapas  1600  20144 111   560.051 Estatal
## 43  2007      UA Chihuahua  2264  21124 145   474.324 Estatal
## 44  2008      UA Chihuahua  2573  22378 147   487.283 Estatal
## 45  2009      UA Chihuahua  2348  23942 128   516.201 Estatal
## 46  2007     UA Cd. Juárez  1729  18653  72   523.440 Estatal
## 47  2008     UA Cd. Juárez  1915  19518  74   545.081 Estatal
## 48  2009     UA Cd. Juárez  2059  19982  85   591.923 Estatal
## 49  2007       UA Coahuila  1855  21458 144   717.712 Estatal
## 50  2008       UA Coahuila  1960  21728 122   741.508 Estatal
## 51  2009       UA Coahuila  2032  22848 123   768.885 Estatal
## 52  2007       UA Guerrero  1096  21717  60   936.427 Estatal
## 53  2008       UA Guerrero  1141  22156  76   933.767 Estatal
## 54  2009       UA Guerrero  1099  22427  73   997.821 Estatal
## 55  2007        UA Nayarit  1016  10684  49   675.053 Estatal
## 56  2008        UA Nayarit   732  11895  48   714.418 Estatal
## 57  2009        UA Nayarit  1059  12226  53   802.215 Estatal
## 58  2007              UANL  4931  66400 281  2723.380 Estatal
## 59  2008              UANL  5315  68940 262  2821.150 Estatal
## 60  2009              UANL  5742  71650 230  2958.470 Estatal
## 61  2007      UA Querétaro  1589  14372 132   648.650 Estatal
## 62  2008      UA Querétaro  1691  15279 137   649.820 Estatal
## 63  2009      UA Querétaro  1770  15863 149   711.703 Estatal
## 64  2007             UASLP  1878  20640 114  1038.120 Estatal
## 65  2008             UASLP  1670  21775 136  1043.550 Estatal
## 66  2009             UASLP  1684  22265 136  1113.640 Estatal
## 67  2007        UA Sinaloa  2868  46430 147  1909.630 Estatal
## 68  2008        UA Sinaloa  3093  47757 154  1913.160 Estatal
## 69  2009        UA Sinaloa  3161  48189 157  2024.910 Estatal
## 70  2007     UA Tamaulipas  2657  39353 185  1178.080 Estatal
## 71  2008     UA Tamaulipas  2769  40574 207  1211.130 Estatal
## 72  2009     UA Tamaulipas  2439  40413 223  1255.710 Estatal
## 73  2007       UA Tlaxcala  1140  10421  53   330.205 Estatal
## 74  2008       UA Tlaxcala  1171   9870  60   335.932 Estatal
## 75  2009       UA Tlaxcala  1161   9713  60   371.735 Estatal
## 76  2007        UA Yucatán  1024  11237  94  1058.180 Estatal
## 77  2008        UA Yucatán   939  11638  95  1069.320 Estatal
## 78  2009        UA Yucatán   910  12439  96  1122.500 Estatal
## 79  2007      UA Zacatecas  1497  15000  87   739.387 Estatal
## 80  2008      UA Zacatecas  1541  17463  96   769.804 Estatal
## 81  2009      UA Zacatecas  1735  18117  92   802.007 Estatal
## 82  2007     UA del Carmen   449   3983  57   159.914 Estatal
## 83  2008     UA del Carmen   385   4066  56   178.769 Estatal
## 84  2009     UA del Carmen   383   4248  40   187.378 Estatal
## 85  2007       UAE Hidalgo  2407  19760  95   613.600 Estatal
## 86  2008       UAE Hidalgo  2322  19714  88   650.807 Estatal
## 87  2009       UAE Hidalgo  2111  20445  90   672.123 Estatal
## 88  2007        UAE México  4399  35274 219   835.082 Estatal
## 89  2008        UAE México  4593  36299 242   849.976 Estatal
## 90  2009        UAE México  4668  36466 249   901.268 Estatal
## 91  2007       UAE Morelos  1298  11470  82   525.284 Estatal
## 92  2008       UAE Morelos  1260  11414  87   541.133 Estatal
## 93  2009       UAE Morelos  1296  11967  86   565.363 Estatal
## 94  2007               UAM  5329  46418 114  4449.930 Federal
## 95  2008               UAM  5329  46418 114  4734.530 Federal
## 96  2009               UAM  5809  50131 142  5035.770 Federal
## 97  2007       U de Colima  1151  10883 124   788.964 Estatal
## 98  2008       U de Colima  1183  11495 121   783.403 Estatal
## 99  2009       U de Colima  1341  11670 115   862.730 Estatal
## 100 2007            U de G  7059  74265 363  2290.110 Estatal
## 101 2008            U de G 10614  77316 385  2351.310 Estatal
## 102 2009            U de G  7439  82543 336  2522.470 Estatal
## 103 2007   U de Guanajuato  1689  13188 119   722.554 Estatal
## 104 2008   U de Guanajuato  1838  14567 127   764.210 Estatal
## 105 2009   U de Guanajuato  1869  15876 128   810.652 Estatal
## 106 2007             UQRoo   336   3179  35   104.457 Estatal
## 107 2008             UQRoo   321   3260  35   107.700 Estatal
## 108 2009             UQRoo   312   3265  33   118.010 Estatal
## 109 2007            UNISON  1959  22830 114   577.052 Estatal
## 110 2008            UNISON  2021  23540 125   591.254 Estatal
## 111 2009            UNISON  1648  23249 138   659.729 Estatal
## 112 2007       UJA Tabasco  2151  26129  66   470.750 Estatal
## 113 2008       UJA Tabasco  2029  25978  77   490.902 Estatal
## 114 2009       UJA Tabasco  2098  26068  81   553.176 Estatal
## 115 2007       UJE Durango  1222  10643  67   515.484 Estatal
## 116 2008       UJE Durango  1329  10987  79   526.327 Estatal
## 117 2009       UJE Durango  1369  11788  93   553.281 Estatal
## 118 2007             UMSNH  2216  36135  77   962.714 Estatal
## 119 2008             UMSNH  3163  38079 103   970.837 Estatal
## 120 2009             UMSNH  3163  38079 103  1035.530 Estatal
## 121 2007              UNAM 26887 185029 364 22138.800 Federal
## 122 2008              UNAM 33577 186641 338 23128.600 Federal
## 123 2009              UNAM 29172 193992 318 24302.200 Federal
## 124 2007               UPN  5200  65736 362   609.334 Federal
## 125 2008               UPN  4961  63587 353   644.665 Federal
## 126 2009               UPN  4870  62784 359   654.521 Federal
## 127 2007     U Veracruzana  4677  49142 220  1395.420 Estatal
## 128 2008     U Veracruzana  4530  51383 232  1415.240 Estatal
## 129 2009     U Veracruzana  4347  53542 242  1541.100 Estatal

A las pruebas me remito…

b_d   # OJO: No muestro la columna "inst" 
## # A tibble: 129 x 7
##       yr  acronimo    d1    m1   pa1       s2    tipo
##    <int>     <chr> <int> <int> <int>    <dbl>   <chr>
##  1  2007      BUAP  3264 44545   170 2041.530 Estatal
##  2  2008      BUAP  3141 45524   162 2069.220 Estatal
##  3  2009      BUAP  3169 50088   139 2209.790 Estatal
##  4  2007 CINVESTAV   634  1844    56 1657.250 Federal
##  5  2008 CINVESTAV   544  2004    54 1754.020 Federal
##  6  2009 CINVESTAV   566  2109    54 1818.780 Federal
##  7  2007    COLPOS   635   852    38  837.388 Federal
##  8  2008    COLPOS   610   843    37  881.013 Federal
##  9  2009    COLPOS   379   855    33  799.195 Federal
## 10  2007    COLMEX   177   331    18  504.647 Federal
## # ... with 119 more rows

Funciones para analizar matrices, df y tibbles

  • head(x) - Imprime los primeros renglones del objeto
  • tail(x) - Imprime los últimos renglones del objeto
  • View(x) - Abre el objeto entero en una nueva ventana
  • nrow() - Número de renglones
  • ncol() - Número de columnas

Funciones para analizar matrices, df y tibbles

  • dim() - Número de renglones y columnas
  • rownames() - Muestra los nombres de los renglones
  • colnames() - Muestra los nombres de las columnas
  • names() - Muestra los nombres de las columnas
  • str() - Muestra la estructura del data frame (dimensiones y tipos de cada variable)

Funciones para analizar matrices, df y tibbles

bd <- read.csv(url("http://segasi.com.mx/clases/cide/vis_man/datos/bd_iesp_07_10.csv"))
head(bd)
##     yr                                                    inst  acronimo
## 1 2007               Benemerita Universidad Autonoma de Puebla      BUAP
## 2 2008               Benemerita Universidad Autonoma de Puebla      BUAP
## 3 2009               Benemerita Universidad Autonoma de Puebla      BUAP
## 4 2007 Centro de Investigacion y de Estudios Avanzados del IPN CINVESTAV
## 5 2008 Centro de Investigacion y de Estudios Avanzados del IPN CINVESTAV
## 6 2009 Centro de Investigacion y de Estudios Avanzados del IPN CINVESTAV
##     d1    m1 pa1      s2    tipo
## 1 3264 44545 170 2041.53 Estatal
## 2 3141 45524 162 2069.22 Estatal
## 3 3169 50088 139 2209.79 Estatal
## 4  634  1844  56 1657.25 Federal
## 5  544  2004  54 1754.02 Federal
## 6  566  2109  54 1818.78 Federal

Funciones para analizar matrices, df y tibbles

tail(bd)
##       yr                            inst      acronimo   d1    m1 pa1
## 124 2007 Universidad Pedagogica Nacional           UPN 5200 65736 362
## 125 2008 Universidad Pedagogica Nacional           UPN 4961 63587 353
## 126 2009 Universidad Pedagogica Nacional           UPN 4870 62784 359
## 127 2007         Universidad Veracruzana U Veracruzana 4677 49142 220
## 128 2008         Universidad Veracruzana U Veracruzana 4530 51383 232
## 129 2009         Universidad Veracruzana U Veracruzana 4347 53542 242
##           s2    tipo
## 124  609.334 Federal
## 125  644.665 Federal
## 126  654.521 Federal
## 127 1395.420 Estatal
## 128 1415.240 Estatal
## 129 1541.100 Estatal

Funciones para analizar matrices, df y tibbles

View(bd)

Funciones para analizar matrices, df y tibbles

# Número de renglones

nrow(bd)
## [1] 129
# Número de columnas
ncol(bd)
## [1] 8